//导入数据库操作模块
const db = require('../db/index')
//导入加密密码模块
const bcrypt = require('bcryptjs')
// 用这个包来生成 Token 字符串
const jwt = require('jsonwebtoken')
//导入配置文件
const config = require('../config')

//注册新用户的处理函数
exports.regUser = (req, res) => {
  console.log(req.body)
  console.log("dddddd")
  //获取客户端提交到服务器的用户信息
  const userInfo = req.body

  //对表单中的数据进行合法性判断
  //用户名和密码是否为空
  // if (!userInfo.username || !userInfo.password) {
  //   //return res.send({ status: 1, message: '用户名或密码不合法' })
  //   return res.cc('用户名或密码不合法!')
  // }

  //定义sql语句，查询用户名是否被占用
  const sqlStr = 'select * from ev_users where username=?'

  db.query(sqlStr, userInfo.username, (err, result) => {
    //执行语句失败
    if (err) {
      //return res.send({ status: 1, message: err.message })
      return res.cc(err)
    }
    //判断用户名是否被占用
    if (result.length > 0) {
      //return res.send({status:1,message:'用户名被占用，请更换其他用户名'})
      return res.cc('用户名被占用，请更换其他用户名!')
    }

    //对用户的密码进行bcrypt加密，返回值是加密后的密码字符串
    userInfo.password = bcrypt.hashSync(userInfo.password, 10)

    //定义插入新用户的sql语句
    const sql = 'insert into ev_users set ?'
    db.query(sql, { username: userInfo.username, password: userInfo.password }, (err, result) => {
      //判断sql语句是否执行成功
      if (err) {
        //return res.send({ status: 1, message: err.message })
        return res.cc(err)
      }
      //判断影响行数是否为1
      if (result.affectedRows !== 1) {
        //return res.send({status:1,message:'注册用户失败，请稍候再试！'})
        return res.cc('注册用户失败，请稍候再试！')
      }
      //注册用户成功
      //res.send({status:0,message:'注册成功！'})
      return res.cc('注册成功！', 0)
    })
  })
  //res.send('reguser OK')
}

//登录的处理函数
exports.login = (req, res) => {
  //接收表单数据
  const userInfo = req.body

  const sql = 'select * from ev_users where username=?'

  //执行sql语句，查询用户数据
  db.query(sql, userInfo.username, (err, results) => {
    if (err) return res.cc(err)

    //执行sql语句成功，但是查询到数据条数不等于1
    if (results.length !== 1) return res.cc('登录失败！')

    //判断用户输入的登录密码是否和数据库中的密码一样
    //用用户输入的密码，和数据库中存储的密码进行对比
    const compareResult = bcrypt.compareSync(userInfo.password, results[0]. password)

    //如果对比的结果等于false则证明用户输入的密码错误
    if (!compareResult) {
      return res.cc('登录失败！')
    }

    //登录成功，生成Token字符串
    //使用es6语法剔除数据中的密码和头像
    const user = { ...results[0], password: '', user_pic: '' }

    //生成Token字符串
    const tokenStr = jwt.sign(user, config.jwtSecretKey, {
      expiresIn:config.expiresIn
    })

    res.send({
      status: 0,
      message: '登录成功',
      //为了方便客户端使用Token，在服务端直接拼接上Bearer 的前缀
      token: 'Bearer ' + tokenStr
    })
  })
}